/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package appbastanteo1.controller;

import appbastanteo1.model.Cliente;
import appbastanteo1.model.Representante;
import appbastanteo1.*;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author JuanJose.Fuchs
 */
public class AdmClientes {

    private ArrayList<Cliente> clientes;

    public AdmClientes() {
        this.clientes = new ArrayList<Cliente>();
    }

    //Implementando métodos a invocar

    public void registrarCliente(String codigo, String ruc, String razonSocial, Date fechaInicio, String tipoEmpresa, int empleados, Representante r) throws BusinessException{
        validarDatosEnBlanco(codigo, ruc, razonSocial, fechaInicio, tipoEmpresa, empleados,r);
        validarClienteDuplicado(codigo, ruc);
        validaCodigo(codigo);

        Cliente nuevoCliente = new Cliente(codigo, ruc, razonSocial, fechaInicio, tipoEmpresa, empleados, r);
        clientes.add(nuevoCliente);
        
    }

    public Cliente buscarCliente(String codigo) {
        for(Cliente cliente : clientes)
            if (cliente.getCodigo().equals(codigo))
                return cliente;
        return null;
    }

    public Cliente buscarClienteXNombre(String nombre) {
        for(Cliente cliente : clientes)
            if (cliente.getRazonSocial().equals(nombre))
                return cliente;
        return null;
    }

    public int obtenerNumeroClientes() {
        return getClientes().size();
    }
    
    private boolean clienteExiste(String codigo, String ruc) {
        for(Cliente cliente : clientes)
            if (cliente.getCodigo().equals(codigo) ||
                cliente.getRuc().equals(ruc))
                return true;
        return false;
    }

    private Representante representanteXCliente(Cliente cliente) {
        Representante representante = new Representante();

        for (Cliente cliente1 : clientes) {
            //if (cliente1.getCodigo().equals(cliente))
            // If cliente1.getcodigo = Representante.cliente) then
            // Return Represemtante.codRepersentante
        }

        return representante;
    }

    public void eliminarCliente(String codigo) {
        Cliente cliente = buscarCliente(codigo);
        if (cliente != null)
            getClientes().remove(cliente);
    }

    
    /**
     * @return the clientes
     */
    public ArrayList<Cliente> getClientes() {
        return clientes;
    }

    private void validarDatosEnBlanco(String codigo, String ruc, String razonSocial, Date fechaInicio, String tipoEmpresa, int empleados, Representante r)
            throws BusinessException {
        String mensaje = "";
        if (codigo.equals(""))
            mensaje += "Debe ingresar el Codigo Cliente";
        if (ruc.equals(""))
            mensaje += "\n Debe ingresaar el número de RUC";
        if (razonSocial.equals(""))
            mensaje += "\n Debe ingresar Razon Social";
        if (fechaInicio == null)
            mensaje += "\n Debe ingresar la Fecha de inicio";
        if (tipoEmpresa.equals(""))
            mensaje += "\nDebe ingresar Tipo de empresa";
        if (empleados == 0)
            mensaje += "\nDebe ingresar cantidad de empleados";
        if (r==null)
            mensaje += "\nDebe ingresar Representante";
        if (! mensaje.equals(""))
            throw  new BusinessException(mensaje);
    }

    private void validaCodigo(String codigo) throws BusinessException{
        if(codigo.length() != 8) throw new BusinessException("El código debe ser 8 dígitos");
    }

    private void validarClienteDuplicado(String codigo, String ruc) throws BusinessException {
         String mensaje = "";
        if (clienteExiste(codigo, ruc)){
            mensaje = "Ya existe un cliente con el mismo Código " +
                    codigo +
                    " o mismo Ruc" + ruc;
            throw new BusinessException(mensaje);
        }

    }

    Cliente obtenerClientePorRuc(String rucCliente) {
        for (Cliente cliente : clientes) {
            if (cliente.getRuc().equals(rucCliente))
                return cliente;
        }
        return null;
    }





}
